+ [AFF-MIGRATION-101] Создать таблицу In-Memory Redis
Спецификация структур данных In-Memory Redis под матрицу совпадений Affinity
NoteКраткая карточка задачи
- Репозиторий / Компонент:
affinity-service(База данныхaffinity_db/ Слой Redis). - Целевая СУБД: Redis v7.0+.
- Ссылка на Метод: Спецификация метода
- Статус: Готово к реализации
- Инструкция по шагам: Спроектировать высокопроизводительную структуру данных для хранения весов парных ассоциаций продуктов. Для минимизации сложности поиска сопутствующих товаров (\(O(1)\)) использовать тип данных Sorted Set (ZSET).
Ключ структуры графа ассоциаций:
affinity:user:{user_id}:product:{product_A_id}
Механика записи на Шаге 3:
При разбиении списка покупок на пары, для каждого элемента пары вызывается атомарный инкремент веса связи с помощью команды ZINCRBY:
-- Если куплены Молоко (prod_milk) и Хлеб (prod_bread), инкрементируем веса в обе стороны:
ZINCRBY affinity:user:usr_777:product:prod_milk 1.0 prod_bread
ZINCRBY affinity:user:usr_777:product:prod_bread 1.0 prod_milk
Механика извлечения топ-ассоциаций на Шаге 7:
Для выдачи рекомендаций с наивысшим весом (Suggestions) используется команда реверсивного чтения диапазона ZREVRANGE с флагом весов:
-- Получить топ-5 сопутствующих товаров для Молока с их весами
ZREVRANGE affinity:user:usr_777:product:prod_milk 0 4 WITHSCORES